

package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import modelos.MCategoria;
import modelos.MDB;
import modelos.MFabrica;
import modelos.MIngrediente;
import modelos.MProducto;
import modelos.MProducto;
import modelos.MTabla;
import vistas.VProducto;


public class CProducto implements ActionListener{

    private VProducto vista;
    private MFabrica modelo;
    private Vector <? extends MDB> categorias;
    private final Vector<? extends MDB> productos;
    private Vector<? extends MDB> ingredientes;

    public CProducto(VProducto aThis) {
        vista=aThis;
        modelo= new MCategoria();
        categorias= modelo.listar();
        modelo = new MIngrediente();
        ingredientes= modelo.listar();
        modelo= new MProducto();
        productos =  modelo.listar();
        cargarDescripciones();
        
    }


    public void cargarDescripciones(){
        Vector<String> descripciones = new Vector<String>();
        for (int i = 0; i < ingredientes.size(); i++)
            descripciones.add(((MIngrediente)ingredientes.elementAt(i)).getDescripcion());
        vista.cargarComboIngrediente(descripciones);
        descripciones = new Vector<String>();
        for (int i = 0; i < categorias.size(); i++)
            descripciones.add(((MCategoria)categorias.elementAt(i)).getDescripcion());
        vista.cargarComboCategoria(descripciones);
    }

     public int buscarCodigoProducto(String descripicion){
        for (int i = 0; i < productos.size(); i++)
            if(((MProducto)productos.elementAt(i)).getDescripcion().equals(descripicion))
                return productos.elementAt(i).getCodigo();
        return -1;
    }

     public int buscarCodigoCategoria(String descripicion){
        for (int i = 0; i < categorias.size(); i++)
            if(((MCategoria)categorias.elementAt(i)).getDescripcion().equals(descripicion))
                return ((MCategoria)categorias.elementAt(i)).getCodigo();
        return -1;
     }
     
     public int buscarCodigoIngrediente(String descripicion){
        for (int i = 0; i < ingredientes.size(); i++)
            if(((MIngrediente)ingredientes.elementAt(i)).getDescripcion().equals(descripicion))
                return ((MIngrediente)ingredientes.elementAt(i)).getCodigo();
        return -1;
     }     


     public void actionPerformed(ActionEvent ae) {
        if(ae.getActionCommand().equals("Registrar")){
                registrar();
        }
        else if(ae.getActionCommand().equals("Consultar")){
            consultar();
        }
        else if(ae.getActionCommand().equals("Eliminar")){
            eliminar();
            vista.reiniciar();
        }
        else if(ae.getActionCommand().equals("Quitar")){
            vista.quitar();
        }
        else if(ae.getActionCommand().equals("Agregar")){
            vista.agregarFila(vista.getRegistro());
        }
        else if(ae.getActionCommand().equals("Salir")){
            vista.setVisible(false);
            vista.reiniciar();
        }
        else{
            vista.reiniciar();
        }
    }

      private void registrar() {
    	  if(vista.validarNumeros()){
      		((MProducto)modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
      	}
      	else
      		return;
        if(vista.validarCamposVacios())
                if(vista.validarNumeros())
                    if(((MProducto)modelo).validarCodigo("Producto"))
                        if(((MProducto)modelo).validarDescripcion("Producto", vista.getTxtDescripcion().getText())){
                        	((MProducto)modelo).setDescripcion(vista.getTxtDescripcion().getText());
                        	((MProducto)modelo).setEstatus("A");
                        	((MProducto)modelo).setPrecio(Float.parseFloat(vista.getTxtPrecio().getText()));
                        	((MProducto)modelo).setCod_categoria(buscarCodigoCategoria(vista.getTextoCmbCategoria()));
                            if(((MProducto)modelo).registrar()){
                                Vector<Integer> c = new Vector<Integer>();
                                Vector<Float> p = new Vector<Float>();
                                Vector<String []> v= vista.getInfoTabla();
                                for (int i = 0; i < v.size(); i++) {
                                    String [] s = v.elementAt(i);
                                    c.add(buscarCodigoIngrediente(s[0]));
                                    p.add(Float.parseFloat(s[1]));
                                }
                                ((MProducto)modelo).registarIngredientes(c, p);
                                vista.reiniciar();
                                JOptionPane.showMessageDialog(new JFrame(),"El producto se ha registrado exitosamente","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
                            }
                        }
                        else
                            JOptionPane.showMessageDialog(new JFrame(),"La descripcion ya se encuentra registrada","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
                    else
                        JOptionPane.showMessageDialog(new JFrame(),"El codigo ya se encuentra registrada","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
                else;
            else;
    }

    private void consultar() {
        if(!vista.getTxtCodigo().getText().isEmpty()){
        	((MProducto)modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
        	((MProducto)modelo).setEstatus("A");
           if(modelo.consultar()){
               vista.getTxtDescripcion().setText(((MProducto)modelo).getDescripcion());
               vista.getTxtPrecio().setText(""+((MProducto)modelo).getPrecio());
               vista.bloquear();
               Vector<String []> v = ((MProducto)modelo).listarIngredientes();
               for (int i = 0; i < v.size(); i++)
                   vista.agregarFila1(v.elementAt(i));
               vista.agregarCategoria(((MProducto)modelo).buscarCategoria());
            }
           else
               JOptionPane.showMessageDialog(new JFrame(),"El codigo ingresado no pertenece a ningun producto","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
        }
        else
           JOptionPane.showMessageDialog(new JFrame(),"El campo codigo esta vacio","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
    }

    private void eliminar() {
       if(!vista.getTxtCodigo().getText().isEmpty()){
    	   ((MProducto)modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
           if(((MProducto)modelo).eliminar()){
               Vector<String []> v = ((MProducto)modelo).listarIngredientes();
               Vector<Integer> c = new Vector<Integer>();
               for (int i = 0; i < v.size(); i++)
                   c.add(Integer.parseInt(v.elementAt(i)[0]));
               ((MProducto)modelo).eliminarIngredientes(c);
               JOptionPane.showMessageDialog(new JFrame(),"El producto se ha eliminado exitosamente","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);

           }
           else
               JOptionPane.showMessageDialog(new JFrame(),"El codigo ingresado no pertenece a ningun producto","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
        }
       else
           JOptionPane.showMessageDialog(new JFrame(),"El campo codigo esta vacio","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
    }

}
